package com.it.od.old2021.od;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author: liminghui
 * @date: 2022/7/28 23:52
 * @version: 1.0
 * @description: 第30题 字符串合并处理
 * 详细描述：
 * <p>
 * 第一步：将输入的两个字符串str1和str2进行前后合并。如给定字符串 "dec" 和字符串 "fab" ， 合并后生成的字符串为 "decfab"
 * <p>
 * 第二步：对合并后的字符串进行排序，要求为：下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标的意思是字符在字符串中的位置。注意排序后在新串中仍需要保持原来的奇偶性。例如刚刚得到的字符串“decfab”，分别对下标为偶数的字符'd'、'c'、'a'和下标为奇数的字符'e'、'f'、'b'进行排序（生成 'a'、'c'、'd' 和 'b' 、'e' 、'f'），再依次分别放回原串中的偶数位和奇数位，新字符串变为“abcedf”
 * <p>
 * 第三步：对排序后的字符串中的'0'~'9'、'A'~'F'和'a'~'f'字符，需要进行转换操作。
 * 转换规则如下：
 * 对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序，然后再转换成对应的十六进制大写字符（注：字符 a~f 的十六进制对应十进制的10~15，大写同理）。
 * 如字符 '4'，其二进制为 0100 ，则翻转后为 0010 ，也就是 2 。转换后的字符为 '2'。
 * 如字符 ‘7’，其二进制为 0111 ，则翻转后为 1110 ，对应的十进制是14，转换为十六进制的大写字母为 'E'。
 * 如字符 'C'，代表的十进制是 12 ，其二进制为 1100 ，则翻转后为 0011，也就是3。转换后的字符是 '3'。
 * 根据这个转换规则，由第二步生成的字符串 “abcedf” 转换后会生成字符串 "5D37BF"。
 * <p>
 * <p>
 * 数据范围：输入的字符串长度满足 1 \le n \le 100 \1≤n≤100
 * <p>
 * 输入描述：
 * 样例输入两个字符串，用空格隔开。
 * <p>
 * 输出描述：
 * 输出转化后的结果。
 * <p>
 * 示例1
 * 输入：
 * dec fab
 * 复制
 * 输出：
 * 5D37BF
 * 复制
 * 示例2
 * 输入：
 * ab CD
 * 复制
 * 输出：
 * 3B5D
 * 复制
 * 说明：
 * 合并后为abCD，按奇数位和偶数位排序后是CDab（请注意要按ascii码进行排序，所以C在a前面，D在b前面），转换后为3B5D
 * 示例3
 * 输入：
 * 123 15
 * 复制
 * 输出：
 * 88C4A
 */
public class Main30 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.nextLine();
        String str2 = sc.nextLine();
        // 1.合并
        String newStr = str1 + str2;
        // 2.奇数和偶数排序
        char[] chars = newStr.toCharArray();
        char[] even = new char[(chars.length + 1) / 2]; // 偶数
        char[] odd = new char[chars.length / 2]; // 奇数
        for (int i = 0; i < chars.length; i++) {
            if (i % 2 == 0) {
                even[i / 2] = chars[i];
            } else {
                odd[i / 2] = chars[i];
            }
        }
        Arrays.sort(even);
        Arrays.sort(odd);
        char[] chars1 = new char[chars.length];
        for (int i = 0; i < chars.length; i++) {
            if (i % 2 == 0) {
                chars1[i] = even[i / 2];
            } else {
                chars1[i] = odd[i / 2];
            }
        }
        //3.转行字符  16进制->10进制->二进制->倒叙->转
        for (int i = 0; i < chars1.length; i++) {
            char c = chars1[i];
            int x = Integer.valueOf(String.valueOf(c), 16);//16进制转化为10进制
            String y = Integer.toBinaryString(x);//将x转化为二进制
            String format = String.format("%04d", Integer.parseInt(y)); // 补0

            StringBuilder sb = new StringBuilder(format);
            StringBuilder reverse = sb.reverse();

            Integer integer = Integer.valueOf(String.valueOf(reverse), 2); // 二进制转换10进制
            String s = Integer.toHexString(integer).toUpperCase();
            chars1[i]=s.charAt(0);
        }
        System.out.println(chars1);


    }
}
